package cn.tedu.servlet;

import cn.tedu.http.HttpRequest;
import cn.tedu.http.HttpResponse;
import cn.tedu.vo.User;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templateresolver.FileTemplateResolver;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;

/**
 * Author：程Sir
 * Name： SmallServer
 * Content:
 * 用来处理查询用户数据的业务
 */
public class ShowAllDataServlet {

    public void service(HttpRequest httpRequest, HttpResponse httpResponse) {

        System.out.println("开始用户数据查询的业务.....");
        // 读取用户的所有数据
        List<User> users = new ArrayList<>();
        // 创建对象
        try (RandomAccessFile raf = new RandomAccessFile("user.txt", "r")) {

            byte[] datas = new byte[32];
            for (int i = 0; i < raf.length() / 100; i++) {

                // 读取用户名
                raf.read(datas);
                String username = new String(datas, "utf-8").trim();
                // 读取密码
                raf.read(datas);
                String password = new String(datas, "utf-8").trim();
                // 读取昵称
                raf.read(datas);
                String nikename = new String(datas, "utf-8").trim();

                // 读取年龄
                int age = raf.readInt();

                // 将查询到的用户数据封装到user对象中
                User user = new User();
                user.setUsername(username);
                user.setPassword(password);
                user.setNikename(nikename);
                user.setAge(age);

                // 把查询到的user对象添加到集合中
                users.add(user);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("读取到的用户数据集合：" + users);

        // 1.创建Thymeleaf的引擎
        TemplateEngine templateEngine = new TemplateEngine();
        // 2.提供解析器
        FileTemplateResolver resolver = new FileTemplateResolver();
        // 3.设置能够解析的模板
        resolver.setTemplateMode("html");
        // 4.设置解析器的字符集
        resolver.setCharacterEncoding("UTF-8");
        // 5.将设置好的解析器添加到引擎中
        templateEngine.addTemplateResolver(resolver);

        // 6.创建添加数据的容器对象
        Context context = new Context();
        // 7.将数据添加到容器对象中
        context.setVariable("users", users);
        // 8.将模板和数据进行整合
        String html = templateEngine.process("./webapps/myweb/userList.html", context);

        System.out.println("整合后的页面："+html);

        // 将最终的数据【动态数据和静态页面】发送出去
        PrintWriter printWriter = httpResponse.getWriter();
        printWriter.println(html);

        System.out.println("用户数据查询的业务完毕！！");

    }


    public static void main(String[] args) {
        ShowAllDataServlet servlet = new ShowAllDataServlet();
        servlet.service(null, null);
    }
}
